home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 142_01 / clset.c < prev    next >
Text File  |  1985-03-09  |  2KB  |  47 lines

  1. /*
  2.             clset.c
  3.     FDC - I Clock Set program for Monitor version 4.0c
  4.         Alan Coates, 1 Oct 1984
  5.         Hi Tech C Compiler v 1.2
  6.  */
  7. #include <stdio.h>
  8.  
  9. #define SECADR   0xF7A9        /* Address given by RTSEC in FDC Monitor */
  10.  
  11. main()
  12.     {
  13.     char *sec, *min, *hr, *day, *mno,  *yr, tmp[20], *s;
  14.     
  15.     sec = (char *)SECADR;         /* else HTC complains about         */
  16.     min = (char *)SECADR + 1;     /* assigning an integer to a pointer */
  17.     hr  = (char *)SECADR + 2; 
  18.     yr  = (char *)SECADR + 3; 
  19.     day = (char *)SECADR + 4; 
  20.     mno = (char *)SECADR + 5; 
  21.     printf("Enter date and time DDMMYYhhmmss NOT separated by spaces\n");
  22.     printf("hit <cr> to set exact time:\t");
  23.     scanf("%s", tmp);
  24.  
  25. /*    Use of a string with explicit ASCII decoding is to allow the
  26.     assignment of decimal digit entry to the single byte locations
  27.     used for the FDC-I real time clock - scanf %c wont take multiple
  28.     digits to one location, and %d overflows the target memory to corrupt
  29.     the next byte.  Code borrowed from Starpri etc.
  30.  
  31.     Note the initialization of clock locations to 0 just before
  32.     assigning the entered value - otherwise sec and perhaps min
  33.     would increment before the first *10 in each step.
  34.  */
  35.     for (*sec = 0,s = tmp + 10; s < tmp + 12 && isdigit(*s);)
  36.         *sec = *sec*10 + *(s++) - 48;
  37.     for (*day = 0,s = tmp; s < tmp + 2 && isdigit(*s);)
  38.         *day = *day*10 + *(s++) - 48;
  39.     for (*mno = 0,s = tmp + 2; s < tmp + 4 && isdigit(*s);)
  40.         *mno = *mno*10 + *(s++) - 48;
  41.     for (*yr = 0,s = tmp + 4; s < tmp + 6 && isdigit(*s);)
  42.         *yr = *yr*10 + *(s++) - 48;
  43.     for (*hr = 0,s = tmp + 6; s < tmp + 8 && isdigit(*s);)
  44.         *hr = *hr*10 + *(s++) - 48;
  45.     for (*min = 0,s = tmp + 8; s < tmp + 10 && isdigit(*s);)
  46.         *min = *min*10 + *(s++) - 48;
  47. }